<?php
/**
* Controlador MENU
*  @filesource
 * @author			Diogo Corazolla
 * @copyright		Copyright 2009 M2R
 * @package			broffices
 * @subpackage		broffices.application.controllers
 * @version			1.0
*/
class MenuController extends Zend_Controller_Action
{
	
	private $intTamPag;
	
	/**
	 * Este metodo sera executado sempre que a classe for instanciada,
	 * depois do construtor.
	 * Faz o carregamento das classes que serao usadas pelo controlador.
	 * @return void
	 */
	public function init()
	{
		Zend_Loader::loadClass('Menu');
		
		// inicializando variaveis com valor padrao
		$this->intTamPag = 100;
	}

	/**
	 * Metodo que mostra a pagina inicial
	 * @return void
	 */
	public function indexAction()
	{
		// exibe tela
		//$this->exibeAction();
		
		// exibe tela
		$this->montaTela("menu/bodyindex.tpl", 
							array(), 
							false);
	}
	
	public function exibeAction()
	{
		$nivel = 0;
		$menu = $this->pegaMenuUsuario();
		
		$htmlMenu = $this->montaHtmlMenu($menu, $nivel);
		
		$this->montaTela("menu/bodymenu.tpl", 
							array("htmlMenu"=>$htmlMenu));
	}
	
	public function pegaMenuUsuario($cod_pai = 0)
	{
		$menu = array();
		$tblMenu = new Menu();
		$menuTemp = $tblMenu->busca(array("bln_ativo="=>1, "pai_id="=>$cod_pai),
									array("int_ordem"))->toArray();
		
		for ($i=0; $i<count($menuTemp); $i++)
		{
			$menu[$i] = $menuTemp[$i];
			$menu[$i]["filhos"] = $this->pegaMenuUsuario($menu[$i]["id"]);
		}
		return $menu;
	}
	
	public function montaHtmlMenu($arrayMenu, $nivel)
	{
		$nivel++;
		$html = "";
		if (count($arrayMenu)>0)
		{
			if ($nivel>1) 
			{
				$html .= "<ul>\n";	
			} 
			for ($i=0; $i<count($arrayMenu); $i++)
			{
				if ($nivel==1) $html .= "<ul>\n";
				$html .= "<li>\n";
				$html .= "<a href='#' title='";
				if (!empty($arrayMenu[$i]["vhr_acao"]))
				{
					$html .= $arrayMenu[$i]["vhr_acao"];
				}
				$html .= "'";
				if (count($arrayMenu[$i]["filhos"])>0)
				{
					$html .= " class='parent'";
				}
				$html .= "'>";
				$html .= $arrayMenu[$i]["vhr_nome"];
				if (count($arrayMenu[$i]["filhos"])>0 && $nivel==1)
				{
					$html .= " <img src='./public/images/navdown_white.gif'>";
				}
				elseif (count($arrayMenu[$i]["filhos"])>0 && $nivel>1)
				{
					$html .= " <img src='./public/images/nav_white.gif'>";
				}
				$html .= "</a>\n";
				
				if (count($arrayMenu[$i]["filhos"])>0)
				{
					$html .= $this->montaHtmlMenu($arrayMenu[$i]["filhos"], $nivel);
				}
				
				$html .= "</li>\n";
				if ($nivel==1) $html .= "</ul>\n";
			}
			if ($nivel>1) 
			{
				$html .= "</ul>\n";	
			}
			
		}
		return $html;
	}
	
	/**
	 * Metodo que mostra o grid
	 * @return void
	 */
	public function tabelaAction()
	{
		$pag = 1;
		$post = Zend_Registry::get('post');
		if (isset($post->pag)) $pag = $post->pag;
		if (isset($post->tamPag)) $this->intTamPag = $post->tamPag;
		$busca = $post->busca;

		$inicio = ($pag>1) ? ($pag-1)*$this->intTamPag : 0;
		$fim = $inicio + $this->intTamPag;

		$arrBusca = array();
		$arrBusca["bln_ativo="] = 1;
		if (!empty($busca)) $arrBusca["vhr_nome like "] = "%".$busca."%";

		// Pegando clientes do banco de dados
		$tblMenu = new Menu();
		$total = $tblMenu->pegaTotal($arrBusca);
		if ($fim>$total) $fim = $total;
		$totalPag = (int)(($total % $this->intTamPag == 0)?($total/$this->intTamPag):(($total/$this->intTamPag)+1));
		$RsMenu = $tblMenu->busca($arrBusca,
									array("pai_id ASC","int_ordem ASC","vhr_nome ASC"),
									$this->intTamPag,
									$inicio);
		
	
		$menu_filhos = array();
		foreach ($RsMenu as $menu)
		{
			$menu_filhos[] = $tblMenu->busca(array("pai_id="=>$menu->id),array("pai_id ASC","int_ordem ASC"));
		}

		$this->montaTela("menu/bodytabela.tpl",
		array("pag"=>$pag,
									"total"=>$total, 
									"inicio"=>($inicio+1), 
									"fim"=>$fim,
									"totalPag"=>$totalPag,
									"busca"=>$busca,
									"menus"=>$RsMenu,
									"menu_filhos"=>$menu_filhos,
									"urlEditar"=>"menu/editar",
									"urlApagar"=>"menu/apagar"), 
		false);
	}

	/**
	 * Metodo que mostra o formulario de novo
	 * @return void
	 */
	public function novoAction()
	{
		$this->montaTela("menu/bodyform.tpl",
		array("acao"=>"menu/incluir"),
		false);
	}

	/**
	 * monta form de edicao
	 * @param int $cod - codigo do objeto a ser editado
	 * @return void
	 */
	public function editarAction()
	{
		$post = Zend_Registry::get('post');
		$cod = $post->codigo;

		$tblMenu = new Menu();
		$row = $tblMenu->find($cod)->current();
		$this->montaTela("menu/bodyform.tpl",
		array("acao"=>"menu/alterar",
									"menu"=>$row), 
		false);
	}

	/**
	 * monta form de exclusao
	 * @param int $cod - codigo do objeto a ser apagado
	 * @return void
	 */
	public function apagarAction()
	{
		$post = Zend_Registry::get('post');
		$cod = $post->codigo;

		$tblMenu = new Menu();
		$row = $tblMenu->find($cod)->current();
		$this->montaTela("menu/bodyapagar.tpl",
		array("acao"=>"menu/excluir",
									"menu"=>$row), 
		false);
	}

	/**
	 * Metodo que grava clientes no banco de dados
	 * @return void
	 */
	public function incluirAction()
	{
		// pegando dados POST salvos
		$post = Zend_Registry::get('post');
		$nome = $post->nome;
		$acao = $post->acao;
		$pai = $post->menu_pai;
		$ordem = $post->ordem;
		
		// objeto modelo tabela Cliente
		$rsMenu = array();
		$tblMenu = new Menu();
		/*$rsMenu = $tblMenu->busca(array("vhr_nome="=>$nome, 
										"bln_ativo="=>1));*/

		$mensagem = "";
		$script = "";

		if (count($rsMenu)>0)
		{
			$mensagem = "Item de Menu ja cadastrado";
		}
		else
		{
			$dados = array("pai_id"=>$pai,"vhr_nome"=>$nome,"vhr_acao"=>$acao,"int_ordem"=>$ordem,"bln_ativo"=>1);
			
			$tblMenu->insert($dados);
			
			$mensagem = "Item de Menu cadastrado com sucesso";
			
			$_site = Zend_Registry::get("site");
			$script = "\$('#div_form').html('');\n
			jqAjaxLink('".$_site["url"]."menu/tabela', '', 'div_tabela');";			
		}

		$this->montaTela("menu/bodymensagem.tpl",
						array("mensagem"=>$mensagem,
						      "script"=>$script), 
		false);
	}

	/**
	 * grava alteracoes no banco
	 * @return void
	 */
	public function alterarAction()
	{
		$post = Zend_Registry::get('post');
		$codigo = $post->cod;
		$nome = $post->nome;
		$acao = $post->acao;
		$pai = $post->menu_pai;
		$ordem = $post->ordem;

		$mensagem = "";
		$script = "";

		$tblMenu = new Menu();
		$row = $tblMenu->find($codigo)->current();
		$row->vhr_nome = $nome;
		$row->pai_id = $pai;
		$row->vhr_acao = $acao;
		$row->int_ordem = $ordem;
		$row->save();

		$mensagem = "Item de Menu alterado com sucesso";
		$_site = Zend_Registry::get("site");
		$script = "\$('#div_form').html('');\n
		jqAjaxLink('".$_site["url"]."menu/tabela', '', 'div_tabela');";	

		$this->montaTela("menu/bodymensagem.tpl",
		array("mensagem"=>$mensagem,
									"script"=>$script), 
		false);
	}

	/**
	 * Metodo que apaga uma cliente do banco
	 * @return void
	 */
	public function excluirAction()
	{
		$post = Zend_Registry::get('post');
		$codigo = $post->cod;

		$mensagem = "";
		$script = "";

		$tblMenu = new Menu();
		$tblMenu->apaga($codigo);

		$mensagem = "Item de Menu apagado com sucesso";
		$_site = Zend_Registry::get("site");
		$script = "\$('#div_form').html('');\n
		jqAjaxLink('".$_site["url"]."menu/tabela', '', 'div_tabela');";	

		$this->montaTela("menu/bodymensagem.tpl",
		array("mensagem"=>$mensagem,
									"script"=>$script), 
		false);
	}

	public function selectMenuAction()
	{
		$get = Zend_Registry::get('get');
		$cod = $get->cod;

		$tblMenu = new Menu();
		$rsMenu = $tblMenu->busca(array("bln_ativo="=>1),
		array("pai_id ASC", "int_ordem ASC"));
		
	
		$menu_filhos = array();
		foreach ($rsMenu as $menu)
		{
			$menu_filhos[] = $tblMenu->busca(array("pai_id="=>$menu->id),array("pai_id ASC","int_ordem ASC"));
		}

		$this->montaTela("menu/selectmenu.tpl",
						array("menus"=>$rsMenu,
							  "menu_filhos"=>$menu_filhos,
							  "cod"=>$cod), 
		false);
	}
	
	
	/**
	 * Monta a tela de retorno ao usuario
	 * @param string $corpo - arquivo tpl do corpo
	 * @param array $dados - array com os dados a serem inseridos na tela, no seguinte formato "nome"=>"valor"
	 * @param boolean $exibeHeader - true ou false para exibir header, menu e rodape 
	 * @return void
	 */
	private function montaTela($corpo, $dados=array())
	{
		// iniciando view
		$view = Zend_Registry::get('view');
		// setando corpo
		$view->assign('_corpo',$corpo);

		// pegando variaveis globais do site
		$_site = Zend_Registry::get("site");
		// setando variaveis globais ao template
		$view->assign('_site', $_site);
		
		// percorrendo array de dados e inserindo no template
		foreach ($dados as $dado=>$valor)
		{
			$view->assign($dado, $valor);
		}
		
		// define o template master
		$tplLayout = $_site["layout_sem_header"];
		// retorna o tempalte master, com corpo e variaveis setadas
		$view->output($tplLayout);
	}
}